import { ConfigEnv, defineConfig, UserConfig,loadEnv } from 'vite'
import react from '@vitejs/plugin-react-swc'
// import path from 'path'
// path模块式自带的.直接引入就行
// npm i @types/node
import { resolve } from 'path'
import { warppEnv } from './src/utils/getEnv.ts'
import viteCompression from 'vite-plugin-compression'

// https://vite.dev/config/
export default defineConfig((mdoe:ConfigEnv):UserConfig=>{
  // 加载环境变量
  const env = loadEnv(mdoe.mode,process.cwd())
  const viteEnv = warppEnv(env)
  
  return {
    plugins: [
      react(),
      //这里使用vite-plugin-compression插件实现gzip压缩
      viteEnv.VITE_USE_COMPRESS && viteCompression({
        verbose:true, // 是否在控制台输出压缩日志
        disable:false,// 是否禁用压缩（true=禁用，false=启用）
        threshold:10240, // 仅压缩大小超过此阈值（单位：字节）的文件（10KB = 10*1024=10240）
        algorithm:'gzip', // 压缩算法，可选 'gzip' | 'brotliCompress' | 'deflate' | 'deflateRaw'
        ext:'.gz', // 压缩后的文件后缀（如 `.gz`、`.br`）
        deleteOriginFile:false, // 是否删除原始文件（慎用！需确保服务器支持压缩文件）
        filter:/\.(js|mjs|json|css|html)$/i  // 正则匹配需要压缩的文件类型
      })
    ],
    resolve:{
      alias:{
        "@":resolve(__dirname,'src')
      }
    },
    // 配置服务
    server:{
      host:'0.0.0.0', // 主机:本地
      port:viteEnv.VITE_PORT, // 设置项目的启动端口,根据env配置文件设置
      open:viteEnv.VITE_OPEN, // 是否自动打开浏览器 根据env配置文件设置
      proxy:{
       '/api':{
          target:viteEnv.VITE_API_URL,  // 后端接口的baseURL 
          changeOrigin:true, // 允许跨域
          rewrite:(path)=>path.replace(/^\/api/,'')  // 重写路径
        }
      }
    },
    build:{
      outDir:'dist',  // 打包文件输出目录
      // minify:'terser', // 打包构建模式  可以清除console.log()
      // terserOptions:{ // 构建的配置
      //   compress:{  // 压缩配置
      //     drop_console:viteEnv.VITE_USE_CONSOLE, // 删除文件中console.log()
      //     drop_debugger:true // 删除文件中debugger
      //   }
      // }
      minify:'esbuild',
      rollupOptions:{
        output:{
          chunkFileNames:'assets/js/[name]-[hash].js', // 代码分割生成的 chunk 文件命名规则
          entryFileNames:'static/js/[name]-[hash].js', // 入口文件命名规则
          assetFileNames:'static/[ext]/[name]-[hash].[ext]' // 静态资源（如图片、字体）命名规则
        }
      }
    }
  }
})
